草庐IT

c++ - 纯虚拟 friend 类

全部标签

c++ - 惰性构造 - 虚拟方法与 if-then stub setter/getter

我的问题的背景是我试图创建一个惰性网格结构,其中网格区域仅在需要时实例化,否则它们在查询时返回默认值。稍微归结一下这个问题,考虑一下我的情况的以下模型:structContainer{std::vectordata;floatget(intindexOuter,intindexInner){returndata[indexOuter].get(indexInner);}}我想stubBase::get在某些情况下函数总是返回相同的值,而在其他情况下我想返回某个数组中的值。我想象两种可能的解决方案。第一个解决方案是在Base上使用标志,即structBase{std::vectordat

python - 使用 ctypes 捕获 c++ 共享库日志条目

我有一个带有c接口(interface)的cplusplus共享库,它在标准输出中写入日志条目。我在使用ctypes库的python应用程序中使用它。python应用程序使用logging库来写入日志条目。我需要做的是捕获共享库的标准输出条目以使用logging模块写入日志条目。换句话说,我想将c库的stdout条目重定向到logging模块,这样我就可以使用logging来使用它的处理程序写入文件和控制台。我发现可以捕获标准输出(seethisSOquestion),但我只能在c模块调用结束时访问它,因此它对日志记录没有用。我想要一种无阻塞的方式来访问标准输出条目。一个最小的例子如下

c++ - 将结构传递给 dll

我想将几个数据传递给Dll函数,所以我正在考虑创建一个结构并通过如下结构将它们传递给Dll函数:structoptions{intop1,intop2,intop3,char*op4,...char*op10}voiddllFunction(optionsmyOptions)无论开发工具是什么,dll都应该以在Windows平台上工作的方式实现,我想知道:这样发送数据有效吗?请注意,结构成员都是基本的c类型(int、float、double、...)。为什么我担心它?如您所知,不同的编译器以不同的方式实现std类,因此您不能通过dll边界传递std类,但我不确定是否所有编译器都以相同的

c++ - 从非常大的范围返回非重复的随机值

我想要一个函数,它可以从一组n个整数(0到n-1)中产生k个伪随机值,而不重复任何先前的结果。k小于或等于n。O(n)内存是NotAcceptable因为n的大小很大以及我需要重新洗牌的频率。这些是我到目前为止考虑过的方法:数组:通常,如果我想要无重复的随机值,我会打乱一个数组,但那是O(n)内存。n可能太大而无法工作。longnextvalue(void){staticlongarray[4000000000];staticints=0;if(s==0){for(inti=0;in态PRNG:有多种随机数生成器可以设计为具有n的周期。并访问n那个时期的独特状态。最简单的例子是:lon

c++ - 在C/C++中使用stdio文件操作时如何检测磁盘空间不足?

我正在做一个小程序如下:voidreserve_file_space(char*file_path,size_tamount){FILE*fp=fopen(file_path,"w+b");if(!fp){printf("couldnotcreateanewfile\n");return;}intfseek_ret=fseek(fp,amount,SEEK_SET);if(fseek_ret!=0){printf("couldnotseektothedesiredposition\n");fclose(fp);return;}chargarbage=1;size_tret=fwrite

c++ - 关于 pthread_cond_wait?

我有以下代码:typedefstruct{...volatileinti_lines_completed;pthread_mutex_tmutex;q265_pthread_cond_tcv;...}q265_picture_t;voidq265_frame_cond_broadcast(q265_picture_t*frame,inti_lines_completed){pthread_mutex_lock(&frame->mutex);frame->i_lines_completed=i_lines_completed;pthread_cond_broadcast(&frame->

c++ - 在此上下文中如何使用 CRTP 删除虚拟方法?

我有以下类似于我的代码库的程序。执行某种算法(可能在多个线程中)的FunctionState类,以及控制FunctionState类如何使用的Function类,并可能执行一些算法设置/拆卸操作。#include#includeclassFunctionState;classFunction{public:virtualFunctionState*NewFunctionState()=0;protected:std::vectorstates;};classFunctionState{public:FunctionState(Function*func):mFunc(func){}vi

c++ - 通过命名成员调用虚拟与地址或引用的区别

更新如下:在clang中,通过其名称使用多态对象的左值不会激活虚拟分派(dispatch),但会通过其地址激活。对于下面的基类B和派生D,虚函数something,unionSpace#includeusingnamespacestd;structB{void*address(){returnthis;}virtual~B(){cout如果您的s值为Space,在Clang++中:(更新:错误地声称g++具有相同的行为)如果您执行s.b.something(),将调用B::something(),而不是对s.b执行动态绑定(bind),但是,如果您调用(&s.b)->something

c++ - gcc 和 g++ 错误 : error trying to exec 'cc1plus' : execvp: No such file or directory

我在编译时遇到问题.c和.cpp使用gcc的文件和g++,对于这两种情况,我都收到了消息:g++(orgcc):errortryingtoexec'cc1plus':execvp:Nosuchfileordirectory`我已经尝试重新安装gcc和g++并确保它们的版本相同。编辑:我使用的是ubuntu16.04.1LTS,g++和gcc的版本都是5.4.020160609。以下是echo|g++-v-xc++-fsyntax-only-的输出:Usingbuilt-inspecs.COLLECT_GCC=g++Target:x86_64-linux-gnuConfiguredwit

c - 使用 strtod strtof atof printf 进行语言环境不变的字符串处理?

是否有任何计划添加在当前语言环境下不变的C标准库字符串处理函数版本?目前有很多脆弱的解决方法,例如,来自jansson/strconv.c:staticvoidto_locale(strbuffer_t*strbuffer){constchar*point;char*pos;point=localeconv()->decimal_point;if(*point=='.'){/*Noconversionneeded*/return;}pos=strchr(strbuffer->value,'.');if(pos)*pos=*point;}staticvoidfrom_locale(cha